package cn.schoolwow.quickflow.service.flowContext.option;

import cn.schoolwow.quickflow.QuickFlow;
import cn.schoolwow.quickflow.QuickFlowExecutor;
import cn.schoolwow.quickflow.domain.FlowContext;
import cn.schoolwow.quickflow.domain.FlowExecutorConfig;
import cn.schoolwow.quickflow.domain.FlowExecutorRootConfig;
import com.alibaba.fastjson.JSONArray;

public interface FlowContextOption {
    /**
     * 开启调试模式
     */
    FlowContext startDebugMode();

    /**
     * 停止调试模式
     */
    FlowContext stopDebugMode();

    /**
     * 是否检查重复数据变量名
     */
    FlowContext checkRepeatKeyName(boolean checkRepeatKeyName);

    /**
     * 返回流程唯一标识
     * */
    long getId();

    /**
     * 指定流程id
     */
    FlowContext setFlowLogId(long flowLogId);

    /**
     * 打印日志
     */
    FlowContext printTrace(boolean printTrace);

    /**
     * 忽略中断
     */
    FlowContext ignoreBroken(boolean ignoreBroken);

    /**
     * 忽略异常
     */
    FlowContext ignoreException(boolean ignoreException);

    /**
     * 流程备注
     */
    FlowContext remark(String remark);

    /**
     * 获取主流程名
     */
    String getFlowName();

    /**
     * 获取主流程名
     */
    String getCurrentFlowName();

    /**
     * 获取流程列表
     */
    JSONArray getFlowArray();

    /**
     * 获取流程日志
     */
    String getFlowTrace();

    /**
     * 获取流程异常
     */
    Exception getFlowException();

    /**
     * 获取流程中断原因
     */
    String getBrokenReason();

    /**
     * 获取配置项
     * */
    FlowExecutorConfig getFlowExecutorConfig();

    /**
     * 获取配置项
     * */
    FlowExecutorRootConfig getFlowExecutorRootConfig();

    /**
     * 获取流程
     * */
    QuickFlow getQuickFlow();

    /**
     * 获取日志记录
     * */
    String getRecord();

    /**
     * 是否启用日志记录
     * */
    FlowContext enableLog(boolean enableLog);

    /**
     * 获取自定义日志
     * */
    String getLog();

    /**
     * 记录自定义日志
     * */
    FlowContext log(String logContent, Object... parameters);
}
